import java.util.Stack;

/**
 * @author 03010570
 * @date 2020/06/30
 * describe:    LeetCode: 剑指 Offer 09 https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/
 */
public class LeetCode_sword_offer_09 {
    class CQueue {
        Stack<Integer> firstStack;
        Stack<Integer> secondStack;

        // 初始化 两个 栈
        public CQueue() {
            firstStack = new Stack();
            secondStack = new Stack();
        }

        /**
         * 添加到队尾，只需要往第二个栈中添加元素即可
         *
         * @param value
         */
        public void appendTail(int value) {
            secondStack.push(value);
        }

        /**
         * 删除 头部，
         * 1、第一个栈有元素，直接删除第一个栈的栈顶
         * 2、第一个栈没有元素，
         * 3、第二个栈有元素，把第二个栈的所有元素一次压入第一个栈中，再 删除 第一个栈顶元素
         * 4、第二个栈没有元素，没有东西可以返回
         *
         * @return
         */
        public int deleteHead() {
            if (!firstStack.empty()) {
                return firstStack.pop();
            }
            if (secondStack.empty()) {
                return -1;
            }
            while (!secondStack.empty()) {
                firstStack.push(secondStack.pop());
            }
            return firstStack.pop();
        }
    }

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */
}
